/**
 * 字母异位词分组
 * 思路：
 * 1. 遍历数组，对每个字符串进行排序，排序后的字符串作为 key，原字符串作为 value，存入哈希表
 * 2. 时间复杂度O(nklogk)，n为数组长度，k为字符串最大长度
 */

const groupAnagrams = (strs) => {
    const map = new Map();
    for(let str of strs) {
        const key = str.split('').sort().join('');
        if(map.has(key)) {
            map.get(key).push(str);
        } else {
            map.set(key, [str]);
        }
    }
    return Array.from(map.values());
}